package com.zyf.workflow.worker;

/**
 * 函数式接口，映射worker的执行逻辑方法，对应逻辑范围内的具体每一步，统一抽象为两个参数，一个返回值.<p>具体实现的逻辑方法
 * 需要按照此规范来编写自己的逻辑方法，入参和返回值的类型可以自定义</p>
 * @param <T> Work初始化瞬狙
 * @param <P> 上个Worker的返回值
 * @param <R> 当前Worker的返回值
 */
@FunctionalInterface
public interface Worker<T, P, R> {

    /**

     *
     * @param data  Work范围内入参，其参数范围包含了所有worker节点需要用到的入参数据
     * @param param 因为Work的执行单元是Node，针对下一个Node需要依赖上一个的情况，将上一个node的返回值作为入参传入
     * @return 执行逻辑的返回值，类型使用者可以自定义，在Work范围内，Worker的返回值，可以作为下一个Worker的入参
     */
    R doWork(T data, P param);

}
